home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / dfue / elcheapofax / printers / rcs / render.c,v < prev    next >
Text File  |  1995-03-09  |  4KB  |  210 lines

  1. head    1.2;
  2. access;
  3. symbols
  4.     OCT93:1.2;
  5. locks;
  6. comment    @ * @;
  7.  
  8.  
  9. 1.2
  10. date    93.06.11.16.29.21;    author Rhialto;    state Exp;
  11. branches;
  12. next    1.1;
  13.  
  14. 1.1
  15. date    93.06.11.15.08.07;    author Rhialto;    state Exp;
  16. branches;
  17. next    ;
  18.  
  19.  
  20. desc
  21. @Render()
  22. @
  23.  
  24.  
  25. 1.2
  26. log
  27. @First real RCS checkin
  28. @
  29. text
  30. @/* $Id$
  31.  * $Log$
  32.  */
  33.  
  34. /*
  35.  *  RENDER.C
  36.  *
  37.  *  David Berezowski - March/88.
  38.  *  Modified for DICE - May/91    Matthew Dillon
  39.  *  Modified for ElCheapoFax April 1993 Olaf 'Rhialto' Seibert.
  40.  *
  41.  *  Copyright (c) 1988  Commodore-Amiga, Inc.
  42.  *  (c)Copyright 1991 Matthew Dillon
  43.  *  (c)Copyright 1993 Olaf Seibert
  44.  */
  45.  
  46. #include <string.h>
  47. #include "defs.h"
  48.  
  49. Prototype __geta4 long Render(long, long, long, long);
  50. Prototype void Transfer(PrtInfo *, UWORD, UBYTE *);
  51. Prototype void *OpenFaxFile(void);
  52.  
  53. int NoFormFeed;
  54.  
  55. /*__geta4*/ long
  56. Render(ct, x, y, status)
  57. long ct, x, y, status;
  58. {
  59.     static long LineBufSize, TotalBufSize;
  60.     static void *FaxHandle;
  61.     static int XSize;
  62.  
  63.     long err;
  64.  
  65.     err = PDERR_NOERR;
  66.  
  67.     /*debug(("Render ct %08lx x %d y %d status %d\n", ct, x, y, status));*/
  68.     switch(status) {
  69.     case 5: /* Pre-Master Initialization */
  70.     /*
  71.      *    ct    - 0 or pointer to IODRPReq structure.
  72.      *    x    - io_Special flag from IODRPReq.
  73.      *    y    - 0.
  74.      */
  75.     debug(("Pre-master init\n"));
  76.     /* select density */
  77.     SetDensity(x & SPECIAL_DENSITYMASK);
  78.     PED->ped_NumRows = 16;
  79.     break;
  80.     case 0:    /* Master Initialization */
  81.     /*
  82.      *    ct    - pointer to IODRPReq structure.
  83.      *    x    - width of printed picture in pixels.
  84.      *    y    - height of printed picture in pixels.
  85.      */
  86.     debug(("Master init\n"));
  87.     XSize = x;
  88.     if (XSize != LINE_BITS) {
  89.         XSize = LINE_BITS;
  90.         debug(("XSize adjusted from %d to %d\n", x, XSize));
  91.     }
  92.     NoFormFeed = (((struct IODRPReq *)ct)->io_Special & SPECIAL_NOFORMFEED)
  93.              != 0;
  94.     PD->pd_PrintBuf = NULL;
  95.     if ((FaxHandle = OpenFaxFile()) == NULL) {
  96.         err = PDERR_BUFFERMEMORY;
  97.         break;
  98.     }
  99.     LineBufSize = (XSize + 7) / 8;
  100.     TotalBufSize = PED->ped_NumRows * LineBufSize;
  101.     PD->pd_PrintBuf = AllocMem(TotalBufSize, MEMF_PUBLIC);
  102.     if (PD->pd_PrintBuf == NULL) {
  103.         faxout_close(FaxHandle);
  104.         FaxHandle = NULL;
  105.         err = PDERR_BUFFERMEMORY;
  106.         break;
  107.     }
  108.     faxout_begin_page(FaxHandle, PED->ped_YDotsInch > Y_DPI/2);
  109.     break;
  110.     case 1: /* Scale, Dither and Render */
  111.         /*
  112.          *        ct        - pointer to PrtInfo structure.
  113.          *        x        - 0.
  114.          *        y        - row # (0 to Height - 1).
  115.          */
  116. #define pi ((struct PrtInfo *)ct)
  117.     if (pi->pi_xpos >= XSize) {
  118.         debug(("Invalid pi_xpos %d (%x)\n", pi->pi_xpos, pi->pi_xpos));
  119.         pi->pi_xpos = 0;
  120.     }
  121.     Transfer((struct PrtInfo *)ct, y, PD->pd_PrintBuf + LineBufSize * (y % PED->ped_NumRows));
  122.     break;
  123.     case 2: /* Dump Buffer to Printer */
  124.     /*
  125.      *    ct    - 0.
  126.      *    x    - 0.
  127.      *    y    - # of rows sent (1 to ped_NumRows).
  128.      */
  129.     {
  130.         int         offset;
  131.  
  132.         debug(("Call tofax %dx\n", y));
  133.         for (offset = 0; y > 0; offset += LineBufSize, y--) {
  134.         tofax(FaxHandle, PD->pd_PrintBuf + offset, XSize);
  135.         }
  136.     }
  137.     break;
  138.     case 3:    /* Clear and Init Buffer */
  139.     /*
  140.      *    ct    - 0.
  141.      *    x    - 0.
  142.      *    y    - 0.
  143.      */
  144.     memset(PD->pd_PrintBuf, 0, TotalBufSize);
  145.     break;
  146.     case 4: /* Close Down */
  147.     /*
  148.      *    ct    - error code.
  149.      *    x    - io_Special flag from IODRPReq.
  150.      *    y    - 0.
  151.      */
  152.  
  153.     debug(("Close down\n"));
  154.     if (FaxHandle) {
  155.         faxout_end_page(FaxHandle);
  156.         faxout_close(FaxHandle);
  157.         FaxHandle = NULL;
  158.     }
  159.     if (PD->pd_PrintBuf != NULL) {
  160.         FreeMem(PD->pd_PrintBuf, TotalBufSize);
  161.         PD->pd_PrintBuf = NULL;
  162.     }
  163.     break;
  164. #ifdef DEBUG
  165.     default:
  166.     debug(("!!Render ct %08lx x %d y %d status %d\n", ct, x, y, status));
  167.     break;
  168. #endif
  169.     }
  170.     return(err);
  171. }
  172.  
  173. #include <clib/asl_protos.h>
  174.  
  175. void *
  176. OpenFaxFile(void)
  177. {
  178.     char       *filename = NULL;
  179.  
  180.     if (AslBase && FileReq) {
  181.     if (AslRequest(FileReq, NULL)) {
  182.         static char     fn[128];
  183.         int         len;
  184.  
  185.         strcpy(fn, FileReq->rf_Dir);
  186.         len = strlen(fn);
  187.         if (len > 0 && fn[len-1] != ':')
  188.         strcat(fn, "/");
  189.         strcat(fn, FileReq->rf_File);
  190.         filename = fn;
  191.     }
  192.     } else {
  193.     filename = "FAX:faxrastportdump";
  194.     }
  195.  
  196.     if (filename)
  197.     return faxout_open(filename, 1 + NoFormFeed);
  198.     return NULL;
  199. }
  200. @
  201.  
  202.  
  203. 1.1
  204. log
  205. @Initial revision
  206. @
  207. text
  208. @d1 3
  209. @
  210.